/*
 * @Author: szx
 * @Date: 2022-03-29 12:05:34
 * @LastEditTime: 2022-03-29 12:31:06
 * @Description:
 * @FilePath: \leetcode\1000-1099\1004\1004.js
 */
/**
 * @param {number[]} nums
 * @param {number} k
 * @return {number}
 */
var longestOnes = function (nums, k) {
    let res = 0,
        left = 0,
        numZero = 0;
    for (let right = 0; right < nums.length; right++) {
        if (nums[right] == 0) numZero++;
        while (numZero > k) {
            if (nums[left] == 0) numZero--;
            left++;
        }
        res = Math.max(res, right - left + 1);
    }
    return res;
};

function findSubArray(nums) {
    const n = nums.length;
    let left = 0, right = 0; //[left, right]，闭区间
    let sums = 0; //用于统计 子数组/子区间 是否有效，根据题目可能会改成求和/计数
    let res = 0; // 保存最大的满足题目要求的 子数组/子串 长度
    while (right < n) {
        // 当右边的指针没有搜索到 数组/字符串 的结尾
        sums += nums[right]; // 增加当前右边指针的数字/字符的求和/计数
        while (不符合条件) { //区间[left, right]不符合题意
            // 此时需要一直移动左指针，直至找到一个符合题意的区间
            sums -= nums[left]; // 移动左指针前需要从counter中减少left位置字符的求和/计数
            left += 1; // 真正的移动左指针，注意不能跟上面一行代码写反
        }// 到 while 结束时，我们找到了一个符合题意要求的 子数组/子串
        res = max(res, right - left + 1); // 需要更新结果
        right += 1; // 移动右指针，去探索新的区间
    }
    return res;
}
